import com.alibaba.fastjson.JSON;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.junit.Test;
import pojo.User;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.Pipeline;

import java.util.Date;

public class Demo3 {

    // 存储对象 - 以String形式存储
    @Test
    public void setString(){
        //1. 连接Redis
        Jedis jedis = new Jedis("192.168.200.129",6379);
        //2.1 准备key(String)-value(User)
        String stringKey = "stringUser";
        User value = new User(2,"李四",new Date());
        //2.2 使用fastJSON将value转化为json字符串
        String stringValue = JSON.toJSONString(value);
        //2.3 存储到Redis中
        jedis.set(stringKey,stringValue);
        //3. 释放资源
        jedis.close();
    }


    // 获取对象 - 以String形式获取
    @Test
    public void getString(){
        //1. 连接Redis
        Jedis jedis = new Jedis("192.168.200.129",6379);
        //2.1 准备一个key
        String key = "stringUser";
        //2.2 去Redis中查询value
        String value = jedis.get(key);
        //2.3 将value反序列化为User
        User user = JSON.parseObject(value, User.class);
        //2.4 输出
        System.out.println("user:" + user);

        //3. 释放资源
        jedis.close();
    }

    /**
     * 使用连接池操作Redis，避免频繁创建和销毁链接对象消耗资源
     */
    @Test
    public void pool2(){
        //1. 创建连接池配置信息
        GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
        poolConfig.setMaxTotal(100);  // 连接池中最大的活跃数
        poolConfig.setMaxIdle(10);   // 最大空闲数
        poolConfig.setMinIdle(5);   // 最小空闲数
        poolConfig.setMaxWaitMillis(3000);  // 当连接池空了之后,多久没获取到Jedis对象,就超时

        //2. 创建连接池
        JedisPool pool = new JedisPool(poolConfig,"192.168.200.129",6379);

        //3. 通过连接池获取jedis对象
        Jedis jedis = pool.getResource();
        //Pipeline pipelined = jedis.pipelined();
        long l1 = System.currentTimeMillis();

        //3。1. 执行incr - 100000次
        for (int i = 0; i < 100000; i++) {
            //pipelined.incr("pp");
            jedis.incr("pp");
        }
        long l2 = System.currentTimeMillis();
        //4. 操作
       // String value = jedis.get("stringUser");
        //System.out.println("user:" + value);
        System.out.println(l2-l1);
        //5. 释放资源
        jedis.close();
    }


}